home *** CD-ROM | disk | FTP | other *** search
- #include <Icons.h>
- #include <LArray.h>
- #include <Movies.h>
- #include <stdlib.h>
- #include <new.h>
- #include <speech.h>
-
- // ============================================================================================
-
- #define kRectMask 3
- #define kIconsRect 0
- #define kParentRect 1
- #define kDontDraw 2
- #define kSpareRectMode 3
-
- #define kPlaySound 4
- #define kMouseTriger 8
- #define kPlayTone 0x00000010
-
- // ============================================================================================
-
- extern unsigned long gNextTickToCheckAnimations;
- extern LArray* gIconsToAnimate;
- extern LArray* gIconsOnScreen;
-
- // ============================================================================================
-
- class AnimatedIconOnScreen;
-
- class AnimatedIcon
- {
- public:
- AnimatedIcon ( void* iconSuiteToReplace );
- virtual ~AnimatedIcon ();
-
- void* GetIconSuiteThisReplaces() const { return mIconSuiteWeAreReplacing; };
-
- static AnimatedIcon* GetAnimatedIconForIconSuite ( void* iconSuite );
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform ) = 0;
-
- void* operator new ( size_t s ) { return NewPtrSysClear ( s ); };
- void operator delete ( void* p ) { if ( p ) DisposePtr( (Ptr) p ); };
-
- protected:
- friend class AnimatedIconOnScreen;
- void* mIconSuiteWeAreReplacing;
- };
-
- // ============================================================================================
-
- class AnimatedIconOnScreen
- {
- public:
- AnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~AnimatedIconOnScreen ( );
-
- virtual void Advance ( ) { };
- virtual void BeginAnimation ( GrafPtr /* port */, const Rect* /* rect */ ) { };
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform ) = 0;
- virtual unsigned long Idle () { return 0; };
-
- unsigned long GetNextAnimationTick ( ) const { return mNextAnimationTick; };
-
- AnimatedIcon* GetAnimatedIcon ( ) const { return mAnimatedIcon; };
- GrafPtr GetPort ( ) const { return mPort; };
- Rect GetRect ( ) const { return mRect; };
- IconAlignmentType GetAlign ( ) const { return mAlign; };
- IconTransformType GetTransform() const { return mTransform; };
- RgnHandle GetRgn ( ) const { return mIconRgn; };
-
- virtual void SetRect ( const Rect& r ) { mRect = r; RectRgn ( mIconRgn, & mRect ); };
- virtual void SetPort ( GrafPtr newPort ) { mPort = newPort; mBitMap = & newPort->portBits; };
- BitMap* GetBitMap () const { return mBitMap; };
-
- void* operator new ( size_t s ) { return NewPtrSysClear ( s ); };
- void operator delete ( void* p ) { if ( p ) DisposePtr( (Ptr) p ); };
-
- unsigned long GetCountOfTimesThisHasBeenInvalidated ( ) const { return mInvalidatedCount; };
- void IncrementCountOfTimesThisHasBeenInvalidated ( ) { mInvalidatedCount++; };
-
- static AnimatedIconOnScreen* GetAnimatedIconOnScreen ( GrafPtr inPort, const Rect& r, void* iconSuiteH );
-
- protected:
- AnimatedIcon* mAnimatedIcon;
- GrafPtr mPort;
- Rect mRect;
- IconAlignmentType mAlign;
- IconTransformType mTransform;
- unsigned long mNextAnimationTick;
- RgnHandle mIconRgn;
-
- unsigned long mInvalidatedCount;
- BitMap* mBitMap;
- };
-
- // ============================================================================================
-
- class FrameAnimatedIconOnScreen;
-
- class FrameAnimatedIcon : public AnimatedIcon
- {
- typedef struct FrameAnimatedIconResourceStruct
- {
- OSType signature;
- unsigned long version;
-
- unsigned long ticksPerAnimationCycle;
-
- unsigned short countOfAnimatedIcons;
- short icons[1]; // really variable size
- } FrameAnimatedIconResourceStruct, *FrameAnimatedIconResourcePtr, **FrameAnimatedIconResourceHandle;
-
- public:
- FrameAnimatedIcon ( void* iconSuiteToReplace, FrameAnimatedIconResourceHandle aicnHandle );
- ~FrameAnimatedIcon ();
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- protected:
- friend class FrameAnimatedIconOnScreen;
-
- static pascal OSErr DetachIconResource ( OSType resType, Handle* iconHandle, void* yourDataPtr );
-
- unsigned long mTicksPerAnimationCycle;
-
- unsigned long mCountOfAnimatedIcons;
- Handle mAnimatedIcons[32];
- };
-
- // ============================================================================================
-
- class FrameAnimatedIconOnScreen : public AnimatedIconOnScreen
- {
- public:
- FrameAnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~FrameAnimatedIconOnScreen ( );
-
- virtual void Advance ( );
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform );
- virtual unsigned long Idle ( );
-
- virtual unsigned long GetTicksPerFrame ( ) const { return mTicksPerAnimationCycle; };
- virtual unsigned long GetFrameCount ( ) const { return mCountOfAnimatedIcons; };
- Handle GetFrameIconSuiteHandle ( unsigned long i ) const { if ( i < mCountOfAnimatedIcons ) return GetParent()->mAnimatedIcons[i]; return nil; };
-
- protected:
- FrameAnimatedIcon* GetParent ( ) const { return (FrameAnimatedIcon*) mAnimatedIcon; };
-
- unsigned long mTicksPerAnimationCycle;
- unsigned long mCountOfAnimatedIcons;
- unsigned long mFrame;
- };
-
- inline AnimatedIconOnScreen* FrameAnimatedIcon::GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform )
- {
- return new FrameAnimatedIconOnScreen ( this, port, rect, align, transform );
- }
-
- // ============================================================================================
-
- class QuicktimeMovieAnimatedIcon : public AnimatedIcon
- {
- typedef struct QuicktimeMovieAnimatedIconnResourceStruct
- {
- OSType signature;
- unsigned long version;
- unsigned long flags;
-
- } QuicktimeMovieAnimatedIconResourceStruct, *QuicktimeMovieAnimatedIconResourcePtr, **QuicktimeMovieAnimatedIconResourceHandle;
-
- public:
- QuicktimeMovieAnimatedIcon ( void* iconSuiteToReplace, QuicktimeMovieAnimatedIconResourceHandle h, const FSSpec* spec, short movieResID );
- ~QuicktimeMovieAnimatedIcon ();
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- static Boolean IsQuicktimeAvailable();
-
- protected:
- friend class QuicktimeMovieAnimatedIconOnScreen;
-
- unsigned long mMovieFlags;
- Movie mMovie;
- short mMovieResFileNum;
-
-
- static Boolean sEnterMoviesCalledByUs;
- static Boolean sQuickTimeAvailableAndInitialized;
- };
-
- // ============================================================================================
-
- class QuicktimeMovieAnimatedIconOnScreen : public AnimatedIconOnScreen
- {
- public:
- QuicktimeMovieAnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~QuicktimeMovieAnimatedIconOnScreen ( );
-
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform );
- virtual unsigned long Idle ();
-
- virtual void SetRect ( const Rect& r );
- virtual void SetPort ( GrafPtr newPort );
-
- protected:
- QuicktimeMovieAnimatedIcon* GetParent ( ) const { return (QuicktimeMovieAnimatedIcon*) mAnimatedIcon; };
- };
-
- inline AnimatedIconOnScreen* QuicktimeMovieAnimatedIcon::GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform )
- {
- return new QuicktimeMovieAnimatedIconOnScreen ( this, port, rect, align, transform );
- }
-
- // ============================================================================================
-
- class PictureAnimatedIcon : public AnimatedIcon
- {
- public:
- typedef struct PictureAnimatedIconResourceStruct
- {
- OSType signature;
- unsigned long version;
-
- unsigned long flags;
-
- short pictureResID;
- } PictureAnimatedIconResourceStruct, *PictureAnimatedIconResourcePtr, **PictureAnimatedIconResourceHandle;
-
- PictureAnimatedIcon ( void* iconSuiteToReplace, PictureAnimatedIconResourceHandle picInfoH );
- ~PictureAnimatedIcon ();
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- protected:
- friend class PictureAnimatedIconOnScreen;
- PicHandle mPictureH;
- unsigned long mPictureFlags;
- };
-
- // ============================================================================================
-
- class PictureAnimatedIconOnScreen : public AnimatedIconOnScreen
- {
- public:
- PictureAnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~PictureAnimatedIconOnScreen ( );
-
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- protected:
- PictureAnimatedIcon* GetParent ( ) const { return (PictureAnimatedIcon*) mAnimatedIcon; };
- };
-
- inline AnimatedIconOnScreen* PictureAnimatedIcon::GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform )
- {
- return new PictureAnimatedIconOnScreen ( this, port, rect, align, transform );
- }
-
- // ============================================================================================
-
- class SoundAnimatedIcon : public AnimatedIcon
- {
- public:
- typedef struct SoundAnimatedIconResourceStruct
- {
- OSType signature;
- unsigned long version;
-
- unsigned long flags;
-
- short soundResID;
-
- unsigned long minTimeBetweenSounds;
- unsigned long maxTimeBetweenSounds;
- } SoundAnimatedIconResourceStruct, *SoundAnimatedIconResourcePtr, **SoundAnimatedIconResourceHandle;
-
- SoundAnimatedIcon ( void* iconSuiteToReplace, SoundAnimatedIconResourceHandle soundInfoH );
- ~SoundAnimatedIcon ();
-
- SndListHandle GetSoundH ( ) const { return mSoundH; };
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- protected:
- friend class SoundAnimatedIconOnScreen;
- SndListHandle mSoundH;
- unsigned long mSoundFlags;
-
- unsigned long mMinTicksBetweenSounds;
- unsigned long mMaxTicksBetweenSounds;
- };
-
- // ============================================================================================
-
- class SoundAnimatedIconOnScreen : public AnimatedIconOnScreen
- {
- public:
- SoundAnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~SoundAnimatedIconOnScreen ( );
-
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform );
- virtual unsigned long Idle ();
-
- protected:
- SoundAnimatedIcon* GetParent ( ) const { return (SoundAnimatedIcon*) mAnimatedIcon; };
- pascal void SoundAnimatedIconOnScreenSoundCallback ( SndChannelPtr soundChannel, SndCommand cmd );
-
- SndChannelPtr mSoundChannel;
- unsigned long mNextTickToStartPlayingSound;
- };
-
- inline AnimatedIconOnScreen* SoundAnimatedIcon::GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform )
- {
- return new SoundAnimatedIconOnScreen ( this, port, rect, align, transform );
- }
-
- // ============================================================================================
-
- class VoiceAnimatedIcon : public AnimatedIcon
- {
- public:
- typedef struct VoiceAnimatedIconResourceStruct
- {
- OSType signature;
- unsigned long version;
-
- unsigned long flags;
-
- short VoiceResID;
-
- unsigned long minTimeBetweenVoice;
- unsigned long maxTimeBetweenVoice;
- } VoiceAnimatedIconResourceStruct, *VoiceAnimatedIconResourcePtr, **VoiceAnimatedIconResourceHandle;
-
- VoiceAnimatedIcon ( void* iconSuiteToReplace, VoiceAnimatedIconResourceHandle VoiceInfoH, FSSpec* spec );
- ~VoiceAnimatedIcon ();
-
- Str255 ** GetVoiceH ( ) const { return mVoiceH; };
-
- virtual AnimatedIconOnScreen* GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
-
- protected:
- friend class VoiceAnimatedIconOnScreen;
- Str255 ** mVoiceH;
- unsigned long mVoiceFlags;
-
- unsigned long mMinTicksBetweenVoice;
- unsigned long mMaxTicksBetweenVoice;
- };
-
- // ============================================================================================
-
- class VoiceAnimatedIconOnScreen : public AnimatedIconOnScreen
- {
- public:
- VoiceAnimatedIconOnScreen ( AnimatedIcon* animatedIcon, GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform );
- ~VoiceAnimatedIconOnScreen ( );
-
- virtual OSErr Draw ( const Rect* rect, IconAlignmentType align, IconTransformType transform );
- virtual unsigned long Idle ();
-
- protected:
- VoiceAnimatedIcon* GetParent ( ) const { return (VoiceAnimatedIcon*) mAnimatedIcon; };
- //pascal void VoiceAnimatedIconOnScreenVoiceCallback ( SndChannelPtr VoiceChannel, SndCommand cmd );
-
- SpeechChannel mVoiceChannel;
- unsigned long mNextTickToStartPlayingVoice;
- };
-
- inline AnimatedIconOnScreen* VoiceAnimatedIcon::GetNewAnimatedIconOnScreen ( GrafPtr port, const Rect* rect, IconAlignmentType align, IconTransformType transform )
- {
- return new VoiceAnimatedIconOnScreen ( this, port, rect, align, transform );
- }
-
- // ============================================================================================
-
-